var redisDb = {};
var log4js = require('log4js');
log4js.configure('./log4js.json');
var logger = log4js.getLogger('redis');
var redis = require('redis');
var client = redis.createClient('6379', '127.0.0.1');
var cache = {};

client.on('error', function(err) {
    logger.error('redis error：' + err);
});

client.on('connect', function() {
    logger.info('redis连接成功...');
});

/**
 * @function 设置缓存
 * @param dbNum 库号
 * @param key 键
 * @param value 值
 * @param expire 过期时间（单位：秒，可为空，为空则不过期）
 * @param callback 回调
 */
redisDb.set = function(dbNum, key, value, expire, callback) {
    dbNum = dbNum || 0;
    cache[key] = value;
    client.select(dbNum, function(err) {
        if (err) {
            logger.error('redis set 选库失败：' + err);
        } else {
            console.log('set info');
            client.set(key, value, function(err, result) {
                if (err) {
                    logger.error('redis插入失败：' + err);
                    callback(err, null);
                    return;
                }
                if (!isNaN(expire) && expire > 0) {
                    client.expire(key, parseInt(expire));
                }
                callback(null, result);
            });
        }
    });
};

/**
 * @function 获取缓存
 */
redisDb.get = async function(dbNum, key, callback) {
    dbNum = dbNum || 0;

    if (typeof cache[key] != 'undefined') {
        return cache[key];
    } else {
        try {
            var result = await queryCache(dbNum, key);
            console.log(' dbNum :' + dbNum + ' key : ' + key + ' value : ' + value);
            return result;
        } catch (error) {}
    }
};

/**
 * @function 查询缓存信息
 */
async function queryCache(dbNum, key) {
    return new Promise((resolve, reject) => {
        try {
            return client.select(dbNum, function(err) {
                if (err) {
                    logger.error('redis get 选库失败：' + err);
                    reject('');
                } else {
                    try {
                        client.get(key, function(err, result) {
                            if (err) {
                                logger.error('redis获取失败：' + err);
                                reject('');
                            } else {
                                cache[key] = result;
                                resolve(result);
                            }
                        });
                    } catch (error) {
                        reject(error);
                    }
                }
            });
        } catch (error) {
            reject(error);
        }
    });
}

module.exports = redisDb;